'''
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ redis==5.0.8
'''
import redis


from  apilib.component import compManager , TComp

class TCompRedis( TComp):
    def __init__(self):
        super().__init__()
        self.handlers={
        }
        self.autoStartServices={}
        self.redisClient  = None
    def compInit(self):
        try:
            pass
        except Exception as er:
            self.manager.log(er)
    def getRedis(self ):
        try:
            if self.redisClient == None :
                ps={
                    "host":self.compSettings['host'],
                    "port":self.compSettings['port'],
                    "db":self.compSettings['db'],
                    "password":self.compSettings['pwd']
                }
                r = redis.StrictRedis(
                    host = ps['host'],
                    port=ps['port'],
                    db=ps['db']
                )
                if r.ping():
                    self.redisClient = r
                    print('connect redis success.')
                else:
                    print('connect redis faild.')
        except Exception as er:
            self.manager.log(er)
        return self.redisClient
    def writeRedisHash(self , dataPath , dictData):
        try:
            client = self.getRedis()
            if client !=None:
                client.hmset(dataPath , dictData)
            else:
                self.redisClient = None
        except Exception as er:
            print('&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&')
            print('write redis error.',er)
            print('key:' , dataPath)
            print('data:' , dictData)
            print('&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&')
            self.redisClient = None
    def readRedisHash(self , dataPath ):
        res ={}
        try:
            client = self.getRedis()
            if client !=None:
                res = client.hgetall(dataPath)
            else:
                self.redisClient = None
        except Exception as er:
            print('&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&')
            print('read redis error.',er)
            print('key:' , dataPath)
            print('&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&')
            self.redisClient = None
        return res
    def readRedisValue(self , dataPath , key):
        res = ""
        try:
            client = self.getRedis()
            if client !=None:
                res = client.hmget(dataPath , key)
            else:
                self.redisClient = None
        except Exception as er:
            print('&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&')
            print('read redis error.',er)
            print('key:' , dataPath)
            print('&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&')
            self.redisClient = None
        return res
_settings = {"host":"192.168.100.14","port":6379,"db":3, "password":"1115"}
compManager.registComponentType('TCompRedis' , TCompRedis , _settings)
